#获取中文音频

# 从指定的文本文件中提取切入时间点，然后收集并根据这些时间点连接多个 WAV 音频文件，最终生成一个合成的音频文件。

import re  # 导入正则表达式模块，用于字符串匹配
import os  # 导入操作系统模块，用于文件和目录操作
from pydub import AudioSegment  # 从 pydub 导入 AudioSegment，用于音频处理

# 文件配置
ch_file = 'updated_ch.txt'  # 要读取的 ch.txt 文件
processed_folder = 'processed_wav_files'  # 已处理的 WAV 文件夹路径
unprocessed_folder = 'unprocessed_wav_files'  # 未处理的 WAV 文件夹路径
final_output_file = 'ch.wav'  # 最终生成的音频文件名称

# 提取第2个数值的函数
def extract_second_value(line):
    # 使用正则表达式从行中提取第二个数值
    match = re.search(r'(\d+): \[(\d+), (\d+), .*?, (\d+)\]', line)
    # 如果匹配成功，则返回第二个数值（单位：ms），否则返回 None
    return int(match.group(2)) if match else None

# 读取 ch.txt 文件并提取第二个数值
def read_ch_file():
    with open(ch_file, 'r', encoding='utf-8') as f:  # 以 utf-8 编码打开 ch.txt 文件
        return [extract_second_value(line) for line in f if extract_second_value(line) is not None]

# 收集所有 WAV 文件
def collect_wav_files():
    wav_files = []  # 初始化空列表，用于存储 WAV 文件路径和索引
    # 遍历处理和未处理的文件夹
    for folder in [processed_folder, unprocessed_folder]:
        for filename in os.listdir(folder):  # 列出文件夹中的所有文件
            if filename.endswith('.wav'):  # 如果文件是 WAV 文件
                index = int(filename.split('_')[1].split('.')[0])  # 提取文件名中的索引
                wav_files.append((index, os.path.join(folder, filename)))  # 将索引和路径元组添加到列表中
    return sorted(wav_files)  # 按索引排序并返回

# 根据切入时间点连接音频
def concatenate_audio_with_silence(wav_files, second_values):
    combined = AudioSegment.silent(duration=0)  # 创建一个初始的静音音频段

    # 遍历所有 WAV 文件和对应的切入时间点
    for i, (index, file_path) in enumerate(wav_files):
        audio_segment = AudioSegment.from_wav(file_path)  # 读取当前 WAV 文件
        start_time_ms = second_values[i]  # 获取对应的切入时间点（单位：ms）

        # 添加静音段
        if i > 0:  # 如果不是第一个音频
            silence_duration = max(0, start_time_ms - len(combined))  # 计算所需的静音时长
            combined += AudioSegment.silent(duration=silence_duration)  # 添加静音段

        combined += audio_segment  # 将当前音频段添加到组合音频中

    combined.export(final_output_file, format='wav')  # 将组合的音频导出为 WAV 文件
    print(f"Final audio exported to {final_output_file}")  # 输出导出信息

if __name__ == "__main__":  
    all_second_values = read_ch_file()  # 读取 ch.txt 文件并提取所有第二个数值
    wav_files = collect_wav_files()  # 收集所有 WAV 文件
    concatenate_audio_with_silence(wav_files, all_second_values)  # 根据切入时间连接音频
